package com.hb.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration;

@Configuration
// 在 Spring 中，如果要启用基于注解的方法安全性，关键之处在于要在配置类上使用 @EnableGlobalMethodSecurity。
// 注意它的 securedEnabled 属性设置成了 true。如果 securedEnabled 属性的值为 true 的话，将会创建一个切点，
// 这样的话 Spring Security 切面就会包装带有 @Secured 注解的方法。
@EnableGlobalMethodSecurity(securedEnabled = true)
// 除了使用 @EnableGlobalMethodSecurity 注解，配置类还扩展了 GlobalMethodSecurityConfiguration。
// 其中 Web 安全的配置类扩展了 WebSecurityConfigurerAdapter，与之类似，这个类能够为方法级别的安全性提供更精细的配置。
public class MethodSecurityCondig extends GlobalMethodSecurityConfiguration {
    /**
     * 例如，如果我们在 Web 层的安全配置中设置认证，那么可以通过重载 GlobalMethodSecurityConfiguration 的 configure() 方法实现该功能
     * @param auth
     * @throws Exception
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
    }
}
